home *** CD-ROM | disk | FTP | other *** search
- Subject: v14i077: Mush updates for SystemV, etc., Patch1
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rsalz@uunet.UU.NET
-
- Submitted-by: island!argv@sun.com (Dan Heller)
- Posting-number: Volume 14, Issue 77
- Archive-name: mush6.0/patch1
-
- The patches included here apply mostly to System V sites and Pyramids.
- Also included is a file called Mailrc which can be used to make Mush look
- very much like ucb's Mail program. It was written by Bart Schaefer
- (ogcvax!schaefer@sun.com). Test your new mush by sending him mail
- congratulating him on his upcoming wedding :-)
-
- For more details (and lists of the new features), see README-6.1.
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of shell archive."
- # Contents: README-6.1 Mailrc Diffs
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'README-6.1' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README-6.1'\"
- else
- echo shar: Extracting \"'README-6.1'\" \(3039 characters\)
- sed "s/^X//" >'README-6.1' <<'END_OF_FILE'
- The patches included here apply mostly to system-v sites. However,
- you should include them if you are going to keep up to date with
- future pathes. Here is a summary of the files and functions that
- have changed and why.
- X
- Also included with these update diffs is a file called Mailrc which
- can be used to make Mush look very much like ucb's Mail program. It was
- written by Bart Schaefer (ogcvax!schaefer@sun.com). Test your new mush
- by sending him mail congratulating him on his upcoming wedding :-)
- X
- mush.h --
- X Truncated version ID.
- X
- X putchar() redefined fputc(c, stdout), fflush(stdout) because sys-v
- X isn't getting newlines when in curses mode. Isn't stdout supposed
- X to be line buffered? Does setting cbreak or something change this?
- X If this doesn't fix the problem for sys-v, add setbuf(stdout, NULL) at
- X the top of main.c, but that shouldn't be necessary (in fact, none of
- X this _should_ be necessary).
- X
- X SIGCHLD may cause infinite loop on pyramid's cpp cuz they
- X define SIGCHLD to be SIGCLD. SIGCHLD is now only defined if it's
- X not already defined. If your system has SIGCHLD and SIGCLD defined
- X to _different values_ and you have SYSV defined, you may need to
- X check into this, but I doubt your system's that weird.
- X
- X glob_flags is now u_long (helps lint)
- X
- loop.c --
- X #ifdef SYSV around signal(SIGCHLD, ...) cuz sys-v doesn't really deal
- X with it correctly. Best just let it default and forget about it. Note
- X that sys-v'ers won't be able to watch processes die using "debug" anymore.
- X
- commands.c --
- X Printenv() now takes an argument. "printenv _var_" will
- X print the varname and value rather than all env variables.
- X
- mail.c --
- X OLD_MAILER and OLD_MAIL now merged to OLD_MAILER. Too confusing
- X to have both and if either is used, both tend to be used. Refer to
- X README-6.0 for details.
- X
- print.c --
- X yet more fixes for varargs.h people. It seems that pyramid (sys-v/BSD)
- X now have va_start() defined to have an open brace ( { ) and va_end()
- X has the closing brace ( } ). So, you can't have a starting block
- X be inbetween each call. Who writes that stuff?
- X
- strings.c --
- X Sprintf() now supports varargs and has #ifdef VPRINTF checks.
- X As it turns out, some systems don't have IOSTRG either, but I'm not
- X really up to date on this one. If you have a problem with it, just
- X remove its reference in the routine and it should work anyway.
- X
- hdrs.c --
- X compose_hdr() should run faster now (thus, any display of headers:
- X 'h', 'z', etc...) should be faster due to the code no longer computes
- X the weekday name (Sun, Mon, etc..) unless specifically requested by %D
- X (in which it takes the same amount of time as before).
- X
- curs_io.c/signals.c --
- X added new function scrn_line which reads a line of text from a line
- X on the curses screen for use by stdout. It seems that sys-v curses
- X package uses shorts instead of chars to represent each char on the
- X screen. I use #ifdef A_CHARTEXT to see if this applies to you.
- X
- END_OF_FILE
- if test 3039 -ne `wc -c <'README-6.1'`; then
- echo shar: \"'README-6.1'\" unpacked with wrong size!
- fi
- # end of 'README-6.1'
- fi
- if test -f 'Mailrc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Mailrc'\"
- else
- echo shar: Extracting \"'Mailrc'\" \(1467 characters\)
- sed "s/^X//" >'Mailrc' <<'END_OF_FILE'
- X# .mushrc to cause Mush to emulate UCB Mail
- X# -- Bart Schaefer (schaefer@cse.ogc.edu)
- X#----------------------------------------------------------------------------
- X# Shortcomings:
- X# Mush does not support the "noisy phone line" flags of Mail
- X# (-i command line option or "set ignore" to ignore RUBOUT characters)
- X# Mush will never remove a system mailbox (no "unset keep" equivalent)
- X# See comments below on (lack of) command prefix recognition
- X# Date shown in headers ought to be date received, but instead is date sent
- X#----------------------------------------------------------------------------
- X#
- X# Set up prompting, headers
- X#
- set prompt='& '
- set mil_time
- set hdr_format='%8.80a %D %M %-2N %5T %l/%c "%.29s"'
- X#
- X# Set up mailing/replying miscellaneous
- X#
- set indent_str = " "
- set reply_to_hdr auto_route
- X#
- X# Set up command interface
- X# Note that a full emulation is difficult, because Mush does not support
- X# command prefix recognition (e.g., Mail interprets "Rep" as "Reply").
- X#
- X# No cmd can use '\!*' because ignore_bang must be set. Yuck.
- set ignore_bang
- X# This stuff is fine, but really needs prefix recognition.
- X#
- cmd Reply replysender
- cmd R replysender
- cmd chdir cd
- cmd chd cd
- cmd + next
- cmd ch cd
- cmd c copy
- cmd file folder
- cmd fi folder
- cmd hold preserve
- cmd ho preserve
- cmd reply replyall
- cmd r replyall
- cmd se set
- cmd shell sh
- cmd so source
- cmd un undelete
- cmd unread "flags U" # "flags" is undocumented, but so is "unread" in Mail
- cmd uns unset
- X
- END_OF_FILE
- if test 1467 -ne `wc -c <'Mailrc'`; then
- echo shar: \"'Mailrc'\" unpacked with wrong size!
- fi
- # end of 'Mailrc'
- fi
- if test -f 'Diffs' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Diffs'\"
- else
- echo shar: Extracting \"'Diffs'\" \(12806 characters\)
- sed "s/^X//" >'Diffs' <<'END_OF_FILE'
- X
- X*** OLD/commands.c Wed Apr 6 22:47:58 1988
- X--- commands.c Tue Apr 26 20:08:49 1988
- X***************
- X*** 747,757 ****
- X return -1;
- X }
- X
- X! Printenv()
- X {
- X! char **e = environ;
- X! while (*e)
- X! wprint("%s\n", *e++);
- X return -1;
- X }
- X
- X--- 747,759 ----
- X return -1;
- X }
- X
- X! Printenv(argc, argv)
- X! char **argv;
- X {
- X! char **e;
- X! for (e = environ; *e; e++)
- X! if (argc < 1 || !strncmp(*e, argv[1]))
- X! wprint("%s\n", *e);
- X return -1;
- X }
- X
- X*** OLD/curses.c Wed Apr 6 22:47:58 1988
- X--- curses.c Wed Apr 27 21:48:35 1988
- X***************
- X*** 120,127 ****
- X if (isoff(glob_flags, CNTD_CMD)) {
- X (void) check_new_mail();
- X curlin = max(1, current_msg - n_array[0] + 1);
- X! (void) strncpy(buf, stdscr->_y[curlin], COLS-1);
- X! buf[COLS-1] = 0; /* strncpy does not null terminate */
- X if (ison(glob_flags, REV_VIDEO) && msg_cnt)
- X STANDOUT(curlin, 0, buf);
- X mail_status(0);
- X--- 120,126 ----
- X if (isoff(glob_flags, CNTD_CMD)) {
- X (void) check_new_mail();
- X curlin = max(1, current_msg - n_array[0] + 1);
- X! scrn_line(curlin, buf);
- X if (ison(glob_flags, REV_VIDEO) && msg_cnt)
- X STANDOUT(curlin, 0, buf);
- X mail_status(0);
- X***************
- X*** 707,711 ****
- X--- 706,726 ----
- X }
- X turnoff(glob_flags, DO_UPDATE);
- X return 1; /* make sure bottom line is clear and no reverse video */
- X+ }
- X+
- X+ scrn_line(line, buf)
- X+ char *buf;
- X+ {
- X+ #ifndef A_CHARTEXT
- X+ (void) strncpy(buf, stdscr->_y[line], COLS-1);
- X+ buf[COLS-1] = 0; /* strncpy does not null terminate */
- X+ #else
- X+ int n;
- X+
- X+ for (n = 0; n < COLS; n++)
- X+ if ((buf = mvinch(curline, n) & A_CHARTEXT) == '\0')
- X+ break;
- X+ buf[n] = '\0';
- X+ #endif /* A_CHARTEXT */
- X }
- X #endif /* CURSES */
- X*** OLD/hdrs.c Wed Apr 6 22:48:00 1988
- X--- hdrs.c Tue Apr 26 19:32:11 1988
- X***************
- X*** 253,259 ****
- X register char *p, *b;
- X char from[256], subject[256], date[17], lines[16], chars[16], line[256];
- X char to[256], addr[256], name[256], status[2];
- X! char Day[3], Mon[4], Tm[8], Yr[5], Wkday[4];
- X
- X /* status of the message */
- X if (ison(msg[cnt].m_flags, DELETE))
- X--- 253,259 ----
- X register char *p, *b;
- X char from[256], subject[256], date[17], lines[16], chars[16], line[256];
- X char to[256], addr[256], name[256], status[2];
- X! char Day[3], Mon[4], Tm[8], Yr[5], Wkday[4], *date_p;
- X
- X /* status of the message */
- X if (ison(msg[cnt].m_flags, DELETE))
- X***************
- X*** 319,326 ****
- X (void) get_name_n_addr(from, name, addr);
- X }
- X
- X! if (p = msg_date(cnt))
- X! date_to_string(p, Yr, Mon, Day, Wkday, Tm, date);
- X
- X (void) sprintf(lines, "%d", msg[cnt].m_lines);
- X (void) sprintf(chars, "%ld", msg[cnt].m_size);
- X--- 319,327 ----
- X (void) get_name_n_addr(from, name, addr);
- X }
- X
- X! if (date_p = msg_date(cnt))
- X! /* don't take weekday unless specified explicitly. See 'D' below */
- X! date_to_string(date_p, Yr, Mon, Day, NULL, Tm, date);
- X
- X (void) sprintf(lines, "%d", msg[cnt].m_lines);
- X (void) sprintf(chars, "%ld", msg[cnt].m_size);
- X***************
- X*** 394,400 ****
- X when 'M': p2 = Mon;
- X when 'Y': p2 = Yr;
- X when 'N': p2 = Day;
- X! when 'D': p2 = Wkday;
- X otherwise: continue; /* unknown formatting char */
- X }
- X len = strlen(sprintf(b, fmt, p2));
- X--- 395,409 ----
- X when 'M': p2 = Mon;
- X when 'Y': p2 = Yr;
- X when 'N': p2 = Day;
- X! when 'D': {
- X! /* specifying weekday name (sun, mon, tue, etc..) can be
- X! * very slow due to lots of *,/, and % operators.
- X! */
- X! char unused[16]; /* for date_to_string */
- X! if (*(p2 = Wkday) == '\0')
- X! (void) date_to_string(date_p, NULL, NULL, NULL,
- X! p2, NULL, unused);
- X! }
- X otherwise: continue; /* unknown formatting char */
- X }
- X len = strlen(sprintf(b, fmt, p2));
- X*** OLD/loop.c Wed Apr 6 22:48:00 1988
- X--- loop.c Tue Apr 26 18:49:13 1988
- X***************
- X*** 51,57 ****
- X (void) signal(SIGQUIT, catch);
- X (void) signal(SIGHUP, catch);
- X (void) signal(SIGTERM, catch);
- X! (void) signal(SIGCHLD, sigchldcatcher);
- X (void) signal(SIGPIPE, SIG_IGN); /* if pager is terminated before end */
- X
- X turnoff(glob_flags, IGN_SIGS);
- X--- 51,63 ----
- X (void) signal(SIGQUIT, catch);
- X (void) signal(SIGHUP, catch);
- X (void) signal(SIGTERM, catch);
- X! (void) signal(SIGCHLD,
- X! #ifndef SYSV
- X! sigchldcatcher
- X! #else /* SYSV */
- X! SIG_DFL
- X! #endif /* SYSV */
- X! );
- X (void) signal(SIGPIPE, SIG_IGN); /* if pager is terminated before end */
- X
- X turnoff(glob_flags, IGN_SIGS);
- X***************
- X*** 97,103 ****
- X * (current message, deleted, unread, etc) are found in mail_status.
- X */
- X mail_status(1);
- X! if (Getstr(line, 256, 0) > -1)
- X p = line;
- X else {
- X if (p = do_set(set_options, "ignoreeof")) {
- X--- 103,109 ----
- X * (current message, deleted, unread, etc) are found in mail_status.
- X */
- X mail_status(1);
- X! if (Getstr(line, sizeof(line), 0) > -1)
- X p = line;
- X else {
- X if (p = do_set(set_options, "ignoreeof")) {
- X*** OLD/mail.c Wed Apr 6 22:48:01 1988
- X--- mail.c Tue Apr 26 20:09:58 1988
- X***************
- X*** 1137,1150 ****
- X
- X /* Make folders conform to RFC-822 by adding From: and Date: headers.
- X * Some older mailers (binmail, execmail, delivermail), don't add
- X! * these headers to the MTA, so add them for OLD_MAIL systems.
- X */
- X for (size = 0; size < next_file; size++) {
- X time_t t;
- X! #ifndef OLD_MAIL
- X if (size == 0)
- X continue;
- X! #endif /* OLD_MAIL */
- X (void) time(&t);
- X if (size > 0) {
- X #ifndef MSG_SEPARATOR
- X--- 1137,1150 ----
- X
- X /* Make folders conform to RFC-822 by adding From: and Date: headers.
- X * Some older mailers (binmail, execmail, delivermail), don't add
- X! * these headers to the MTA, so add them for OLD_MAILER systems.
- X */
- X for (size = 0; size < next_file; size++) {
- X time_t t;
- X! #ifndef OLD_MAILER
- X if (size == 0)
- X continue;
- X! #endif /* OLD_MAILER */
- X (void) time(&t);
- X if (size > 0) {
- X #ifndef MSG_SEPARATOR
- X*** OLD/msgs.c Wed Apr 6 22:48:02 1988
- X--- msgs.c Tue Apr 26 20:14:45 1988
- X***************
- X*** 305,310 ****
- X--- 307,313 ----
- X (void) fclose(mail_fp);
- X return;
- X }
- X+ (void) fseek(tmpf, 0L, 2); /* assure we're at the end of the file */
- X } else if (msg_cnt)
- X (void) fseek(tmpf, msg[msg_cnt-1].m_offset+msg[msg_cnt-1].m_size,L_SET);
- X
- X*** OLD/mush.h Wed Apr 6 22:48:02 1988
- X--- mush.h Tue Apr 26 21:09:52 1988
- X***************
- X*** 1,6 ****
- X /* @(#)mush.h (c) copyright 1986 (Dan Heller) */
- X
- X! #define VERSION "Mail User's Shell (Vers 6.0) Sat Apr 2 19:36:07 PST 1988"
- X
- X #include "config.h"
- X
- X--- 1,6 ----
- X /* @(#)mush.h (c) copyright 1986 (Dan Heller) */
- X
- X! #define VERSION "Mail User's Shell (6.1 4/26/88)"
- X
- X #include "config.h"
- X
- X***************
- X*** 78,85 ****
- X #ifdef putchar
- X #undef putchar
- X #endif /* putchar */
- X! #define putchar(c) fputc(c, stdout)
- X! #define bell() fputc('\007', stderr)
- X
- X /* For error recovery purposes, send keyboard generated signals to a special
- X * routine (interrupt) to set a global flag (WAS_INTR) and return to the
- X--- 78,85 ----
- X #ifdef putchar
- X #undef putchar
- X #endif /* putchar */
- X! #define putchar(c) fputc(c, stdout), fflush(stdout)
- X! #define bell() fputc('\007', stderr), fflush(stderr)
- X
- X /* For error recovery purposes, send keyboard generated signals to a special
- X * routine (interrupt) to set a global flag (WAS_INTR) and return to the
- X***************
- X*** 181,190 ****
- X #endif /* F_OK */
- X typedef unsigned long u_long;
- X #define vfork fork
- X! #ifdef SIGCHLD
- X! #undef SIGCHLD
- X! #endif /* SIGCHLD */
- X #define SIGCHLD SIGCLD
- X #endif /* SYSV */
- X
- X #if !defined(SUNTOOL) && !defined(CURSES)
- X--- 181,189 ----
- X #endif /* F_OK */
- X typedef unsigned long u_long;
- X #define vfork fork
- X! #ifndef SIGCHLD
- X #define SIGCHLD SIGCLD
- X+ #endif /* SIGCHLD */
- X #endif /* SYSV */
- X
- X #if !defined(SUNTOOL) && !defined(CURSES)
- X***************
- X*** 277,283 ****
- X #define NO_FLG 0
- X
- X /* various flags */
- X! long glob_flags; /* global boolean flags thruout the whole program */
- X #define DO_UPDATE 1 /* check for changes to avoid unnecessary copyback */
- X #define REV_VIDEO 2 /* reverse video for curses or toolmode */
- X #define CONT_PRNT 3 /* continue to print (maybe a printf) without a '\n' */
- X--- 276,282 ----
- X #define NO_FLG 0
- X
- X /* various flags */
- X! u_long glob_flags; /* global boolean flags thruout the whole program */
- X #define DO_UPDATE 1 /* check for changes to avoid unnecessary copyback */
- X #define REV_VIDEO 2 /* reverse video for curses or toolmode */
- X #define CONT_PRNT 3 /* continue to print (maybe a printf) without a '\n' */
- X*** OLD/signals.c Wed Apr 6 22:48:03 1988
- X--- signals.c Wed Apr 27 21:36:43 1988
- X***************
- X*** 179,186 ****
- X msg_cnt) {
- X int curlin = max(1, current_msg - n_array[0] + 1);
- X char buf[256];
- X! (void) strncpy(buf, stdscr->_y[curlin], COLS-1);
- X! buf[COLS-1] = 0; /* strncpy does not null terminate */
- X STANDOUT(curlin, 0, buf);
- X }
- X print("Stopping...");
- X--- 179,185 ----
- X msg_cnt) {
- X int curlin = max(1, current_msg - n_array[0] + 1);
- X char buf[256];
- X! scrn_line(curlin, buf);
- X STANDOUT(curlin, 0, buf);
- X }
- X print("Stopping...");
- X
- X*** OLD/print.c Thu Apr 28 22:45:28 1988
- X--- print.c Thu Apr 28 22:45:59 1988
- X***************
- X*** 1,3 ****
- X--- 1,4 ----
- X+
- X /* @(#)print.c 2.4 (c) copyright 10/15/86 (Dan Heller) */
- X
- X #include "mush.h"
- X***************
- X*** 36,43 ****
- X static int x; /* position on line saved for continued prints */
- X char *p; /* same type as struct file _ptr,_buf in stdio.h */
- X
- X- va_start(args); /* have args point to the beginning of argument stack */
- X-
- X #ifdef CURSES
- X if (iscurses) {
- X if (isoff(glob_flags, CONT_PRNT))
- X--- 37,42 ----
- X***************
- X*** 45,72 ****
- X } else
- X #endif /* CURSES */
- X if (istool < 2) {
- X #ifdef VPRINTF
- X vprintf(fmt, args);
- X #else /* VPRINTF */
- X _doprnt(fmt, args, stdout);
- X #endif /* VPRINTF */
- X- fflush(stdout);
- X va_end(args);
- X return;
- X }
- X #ifdef VPRINTF
- X! if (fmt)
- X! vsprintf(msgbuf, fmt, args); /* NULL in fmt reprints last msg */
- X #else /* VPRINTF */
- X! foo._cnt = BUFSIZ;
- X! foo._base = foo._ptr = msgbuf; /* may have to be cast(unsigned char *) */
- X! foo._flag = _IOWRT+_IOSTRG;
- X! if (fmt) { /* passing NULL (not "") reprints last message */
- X! (void) _doprnt(fmt, args, &foo);
- X! *foo._ptr = '\0'; /* plant terminating null character */
- X }
- X- #endif /* VPIRNTF */
- X- va_end(args);
- X p = msgbuf;
- X if (iscurses || istool)
- X while (p = index(p, '\n'))
- X--- 44,72 ----
- X } else
- X #endif /* CURSES */
- X if (istool < 2) {
- X+ va_start(args);
- X #ifdef VPRINTF
- X vprintf(fmt, args);
- X #else /* VPRINTF */
- X _doprnt(fmt, args, stdout);
- X #endif /* VPRINTF */
- X va_end(args);
- X+ fflush(stdout);
- X return;
- X }
- X+ if (fmt) {
- X+ va_start(args);
- X #ifdef VPRINTF
- X! vsprintf(msgbuf, fmt, args); /* NULL in fmt reprints last msg */
- X #else /* VPRINTF */
- X! foo._cnt = BUFSIZ;
- X! foo._base = foo._ptr = msgbuf; /* may have to be cast(unsigned char *) */
- X! foo._flag = _IOWRT+_IOSTRG;
- X! (void) _doprnt(fmt, args, &foo);
- X! *foo._ptr = '\0'; /* plant terminating null character */
- X! #endif /* VPRINTF */
- X! va_end(args);
- X }
- X p = msgbuf;
- X if (iscurses || istool)
- X while (p = index(p, '\n'))
- X***************
- X*** 88,93 ****
- X--- 88,94 ----
- X turnon(glob_flags, CNTD_CMD); /* display ...continue... prompt */
- X }
- X turnoff(glob_flags, CONT_PRNT);
- X+ fflush(stdout); /* some sys-v's aren't fflushing \n's */
- X return;
- X }
- X #endif /* CURSES */
- X***************
- X*** 117,125 ****
- X char msgbuf[BUFSIZ]; /* we're not getting huge strings */
- X va_list args;
- X
- X- va_start(args);
- X-
- X if (istool < 2) {
- X #ifdef VPRINTF
- X vprintf(fmt, args);
- X #else /* VPRINTF */
- X--- 118,125 ----
- X char msgbuf[BUFSIZ]; /* we're not getting huge strings */
- X va_list args;
- X
- X if (istool < 2) {
- X+ va_start(args);
- X #ifdef VPRINTF
- X vprintf(fmt, args);
- X #else /* VPRINTF */
- X***************
- X*** 131,136 ****
- X--- 131,137 ----
- X }
- X if (!fmt)
- X return;
- X+ va_start(args);
- X #ifdef VPRINTF
- X vsprintf(msgbuf, fmt, args); /* NULL in fmt reprints last msg */
- X #else /* VPRINTF */
- X***************
- X*** 140,145 ****
- X--- 141,147 ----
- X _doprnt(fmt, args, &foo); /* format like printf into msgbuf via foo */
- X *foo._ptr = '\0'; /* plant terminating null character */
- X #endif /* VPRINTF */
- X+ va_end(args);
- X Addstr(msgbuf); /* addstr() will scroll if necessary */
- X }
- X
- X***************
- X*** 183,185 ****
- X--- 185,188 ----
- X {
- X print("");
- X }
- X+
- END_OF_FILE
- if test 12806 -ne `wc -c <'Diffs'`; then
- echo shar: \"'Diffs'\" unpacked with wrong size!
- fi
- # end of 'Diffs'
- fi
- echo shar: End of shell archive.
- exit 0
-